הפקולטה למדעי המחשב אוטומטים ושפות פורמליות (236353) ביטויים רגולריים הרצאה 5 המצגת מבוססת על ספרם של פרופ' נסים פרנסיז ופרופ' שמואל זקס, "אוטומטים ושפות פורמליות", האוניברסיטה הפתוחה, 1987. גרסה ראשונה של מצגת זו הוכנה על-ידי אריאל ירושביץ, תחת הנחייתו של פרופ' שמואל זקס. בגרסה הנוכחית הוכנסו מספר שינויים ועדכונים על-ידי פרופ' יובל ישי, פרופ' מיכאל קמינסקי ופרופ' שמואל זקס.
תקציר הפרקים הקודמים המשכנו לדון באוטומטים א"ד. הראינו שקילותם למודל הבסיסי. סיימנו לדון באוטומטים א"ד עם מסעי-. 2
סגירות תחת פעולות רגולריות נשתמש בכלים שרכשנו אי-דטרמיניזם ומסעי להוכיח מספר תכונות סגירות נוספות. הפעולות איחוד ( ), שרשור פעולות רגולריות. משפט (*) ואיטרציה ( ) על מנת נקראות השפות הרגולריות סגורות תחת הפעולות הרגולריות. סגירות תחת איחוד הוכחה ע"י שימוש בהוכחת סגירות תחת חיתוך וכלל דה-מורגן, וכן ע"י בנייה ישירה של אוטומט מכפלה. נוכיח סגירות זו שנית על מנת להציג את כוחם של הכלים שנרכשו. 3
סגירות לאיחוד יהיו L 1, L 2 שפות רגולריות לא ריקות ויהיו = 1,2 i A i = (Q i, Σ, q 0i, δ i, {q fi }), אוטומטים המקבלים אותן, כך ש- = 2 Q 1 Q ומ- q fi אין קשתות יוצאות. (ראינו כי לכל אוטומט קיים אוטומט שקול מהצורה הנ"ל.) להלן תיאור גרפי של אוטומט A המקבל את : L 1 L 2 q 01 A 1 q f1 q 0 q 02 A 2 q f2 q f 4
סגירות לאיחוד (המשך 1) L 2 הגדרה פורמלית של A: נגדיר ) Α A = (Q 1 Q 2 {q 0, q f },Σ,q 0,{q f },δ כך ש q 0, q f Q 1 Q 2 δ Α (q 0,) = {q 01, q 02 } q Q 1 -{q f1 }, σ Σ {}, δ Α (q,σ) = δ 1 (q, σ) q Q 2 -{q f2 }, σ Σ {}, δ Α (q,σ) = δ 2 (q, σ) δ Α (q f1,) = δ Α (q f2,) = {q f } "האוטומט מנחש" האם המילה הנוכחית שייכת ל L 1 או ל ומכאן ממשיך את החישוב כמו האוטומט המתאים. לצורך הוכחה יש להראות את ההכלה הדו כיוונית בפירוט. 5
סגירות לשרשור יהיו L 1, L 2 שפות רגולריות לא ריקות ויהיו = 1,2 i A i = (Q i,σ,q 0i,{q fi },δ i ), האוטומטים המקבלים אותן. שוב נניח כי קבוצות המצבים של האוטומטים הינן זרות ולכל אחד מהאוטומטים מצב מקבל יחיד, אשר אין ממנו קשתות יוצאות. להלן תיאור גרפי של האוטומט A המקבל את L 1 L 2 q 01 A 1 q f1 q 02 A 2 q f2 6
סגירות לשרשור (המשך 1) הגדרה פורמלית של A נגדיר ) Α A = (Q 1 Q 2,Σ,q 01,{q f2 },δ q Q 1 -{q f1 }, σ Σ {}, δ Α (q,σ) = δ 1 (q, σ) δ Α (q f1,) = {q 02 } q Q 2, σ Σ {}, δ Α (q,σ) = δ 2 (q, σ) כולל סדרת מעברים המתחילה ב q 01 q, f1 מעבר ל- q 02 ומשם חישוב המסתיים ב- חישוב מקבל של A ומסתיימת ב.q f2 ניתן להראות כי חישוב כנ"ל אפשרי רק על מילה השייכת ל-.L 1 L 2 7
סגירות לאיטרציה תהי L שפה רגולריות ויהי },δ) A = (Q,Σ,q 0,{q f אוטומט המקבל אותה. שוב נניח כי לאוטומט הנ"ל מצב מקבל יחיד, ממנו קשתות יוצאות. אשר אין להלן תיאור גרפי של אוטומט * A המקבל את * L: q 0 * q 0 A q f q f * 8
סגירות לאיטרציה (המשך 1).q f * q 0 ל- * הגדרה פורמלית של * A A * = (Q {q 0*, q f* },Σ,q 0*,{q f* },δ * ) δ * (q 0*, ) = δ * (q f, ) = {q 0, q f* } q Q-{q f }, σ Σ {}, δ * (q,σ) = δ (q, σ) - נגדיר רעיון ההוכחה (כיוון אחד): מתקבל ע"י האוטומט כיוון שיש מסע- מ עבור כל מילה שהיא שרשור מספר סופי של מילים מ- L נעבור בתוך הלולאה הפנימית שבאיור האוטומט, ולבסוף נעבור עם מסע.w L + כך ניתן להגדיר מסלול חישוב מקבל עבור כל q. * ה ל- f פורמלית יש לבצע אינדוקציה על מספר השרשורים. 9
סגירות לאיטרציה (המשך 2) q 0 * q 0 A q f q f * רעיון ההוכחה (כיוון שני): נניח ש- * A מקבל את w, מקרה א': המסלול מבצע מסע- במקרה זה,w= ולכן *.w L מ ונתבונן במסלול חישוב מקבל..q f * q 0 ל- * - מקרה ב': המסלול מגיע 1 k פעמים ל- q, f ולאחר כל ביקור ב- q f פרט לביקור האחרון מבצע מסע- ל- q. 0 במקרה זה, ניתן לרשום,w=w 1 w 2 w k כאשר כל w i מתקבלת ע"י.w L * לכן במקרה זה A. 10
ביטויים רגולריים עד כה תיארנו שפות רגולריות ע"י בניית אוטומט, וכן ע"י סימוני קבוצות רגילים כלומר תיאור תכונות שונות של המילים השייכות לקבוצה. באמצעות תיאור כקבוצה ניתן כמובן לתאר גם שפות שאינן רגולריות. הוכחת רגולריות של שפה דורשת מציאת אוטומט המקבל אותה, או שימוש בתכונות סגירות. נציג עתה דרך נוספת לתיאור שפות רגולריות. דרך סימון זו מבטיחה כי כל שפה הניתנת לתיאור באמצעותה היא רגולרית. 11
ביטוים רגולריים - סינטקס,R Σ הגדרה: אוסף הביטויים הרגולריים מוגדר ברקורסיה באופן הבא: אטומים:, R σ Σ, σ R (מעל א"ב Σ), המסומן ב- (r 1 r 2 ) וכן R פעולות יצירה: אם r 1, r 2 R אז (r 1 + r 2 ) R אם r R אז (r * ) R דוגמאות: כל הביטויים הבאים הם ביטויים רגולריים מעל Σ={a,b} :,, a, b (+b), ((+b) b) ( * ), ((+b) (b * )) 12
ביטויים רגולריים - סמנטיקה לביטויים אין נאמר כי L[r] היא השפה שמציין הביטוי r ההגדרה הנ"ל הינה הגדרה תחבירית בלבד שום משמעות בשלב זה. עתה נתאים לכל ביטוי רגולרי שפה. פורמלית, נגדיר את הפונקציה Σ* L: R 2 L[ ] = L[] = { } σ Σ, L[σ] = {σ} אם r 1, r 2 R L[(r 1 + r 2 )] = L[r 1 ] L[r 2 ] L[(r 1 r 2 )] = L[r 1 ] L[r 2 ] L[(r) * ] = (L[r]) * אז r R אם 13
ביטויים רגולריים קיצורי כתיבה 14 אם } n Σ = {σ 1,,σ אז נשתמש בסימן Σ לציון הביטוי.( ((σ 1 + σ 2 ) + σ 3 ) + + σ n ) אם r ביטוי רגולרי נסמן ב ) + r) את הביטוי הרגולרי (( *.(r (r ע"י קביעת סדר קדימויות נוכל להשמיט סוגריים: בנוסף, * קדימות גבוהה ביותר קדימות בינונית + קדימות נמוכה בדרך כלל נשמיט את אופרטור השרשור. לבסוף לעיתים נשתמש בביטוי הרגולרי לציון השפה שהוא מייצג ללא סימון ה-.L[r] נדגיש כי ביטוי המכיל את הקיצורים הנ"ל אינוביטוי רגולרי, אלא קיצור כתיבה של ביטוי רגולרי.
ביטויים רגולריים דוגמאות נוספות הביטוי ))) * ) (c ((a * ) ((b * ניתן לכתיבה מקוצרת כך:.a * b * c * שפת כל המילים מעל Σ={a,b} נתונה ע"י הביטוי.Σ * או ע"י הקיצור ((a+b) * ) שפת המילים באורך זוגי מעל Σ={a,b} נתונה ע"י הביטוי * ((a+b) (a+b)) או ע"י הקיצור *.(ΣΣ) 15
, שקילות ביטויים רגולריים לאוטומטים נזכור כי המוטיבציה להגדרת ביטויים רגולריים הייתה לתת צורת ייצוג (נוספת) לשפות רגולריות. נוכיח אם כן את שני המשפטים הבאים: לכל r R לכל שפה רגולרית L[r] היא שפה רגולרית. L קיים ביטוי רגולרי.L[r] = L כך ש- r 16
שקילות ביטויים רגולריים לאוטומטים (המשך 1) משפט לכל r R מעל L[r],Σ היא שפה רגולרית. הוכחה נוכיח באינדוקציית מבנה על r. בסיס האינדוקציה: = [ ]L היא רגולרית (בנינו לה אוטומט בהרצאה 2). } } L[] = היא רגולרית (בנינו לה אוטומט בהרצאה 2). לכל L[σ] =,{σ} σ Σ היא רגולרית (בנינו לה אוטומט בהרצאה 2). צעד האינדוקציה נובע ישירות מסגירות השפות הרגולריות תחת פעולות רגולריות (איך?). 17
בניית אוטומט מתוך ביטוי רגולרי המשפט האחרון מספק דרך אפקטיבית לבניית אוטומט המקבל את השפה שמציין ביטוי רגולרי נתון. נתבונן בביטוי * 0 1+1 *.0 להלן בנייה של אוטומט המקבל את השפה המתאימה: 0 r = 0 18
בניית אוטומט מתוך ביטוי רגולרי המשפט האחרון מספק דרך אפקטיבית לבניית אוטומט המקבל את השפה שמציין ביטוי רגולרי נתון. נתבונן בביטוי * 0 1+1 *.0 להלן בנייה של אוטומט המקבל את השפה המתאימה: 0 r = 0 * 19
בניית אוטומט מתוך ביטוי רגולרי המשפט האחרון מספק דרך אפקטיבית לבניית אוטומט המקבל את השפה שמציין ביטוי רגולרי נתון. נתבונן בביטוי * 0 1+1 *.0 להלן בנייה של אוטומט המקבל את השפה המתאימה: 0 r = 0 * 1 r = 1 20
בניית אוטומט מתוך ביטוי רגולרי המשפט האחרון מספק דרך אפקטיבית לבניית אוטומט המקבל את השפה שמציין ביטוי רגולרי נתון. נתבונן בביטוי * 0 1+1 *.0 להלן בנייה של אוטומט המקבל את השפה המתאימה: 0 r = 0 * 1 1 21
בניית אוטומט מתוך ביטוי רגולרי המשפט האחרון מספק דרך אפקטיבית לבניית אוטומט המקבל את השפה שמציין ביטוי רגולרי נתון. נתבונן בביטוי * 0 1+1 *.0 להלן בנייה של אוטומט המקבל את השפה המתאימה: 0 r = 0 * 1 1 1 r = 1*0 0 בדומה: 22
בניית אוטומט מתוך ביטוי רגולרי המשפט האחרון מספק דרך אפקטיבית לבניית אוטומט המקבל את השפה שמציין ביטוי רגולרי נתון. נתבונן בביטוי * 0 1+1 *.0 להלן בנייה של אוטומט המקבל את השפה המתאימה: 0 1 r = 0 * 1+1 * 0 1 0 23
והכיוון השני....L[r] = L כך ש- r L Σ * משפט לכל שפה רגולרית הוכחה רגולרית, קיים ביטוי רגולרי לכן קיים אוטומט סופי דטרמיניסטי.L(A) = L כך ש- A = ({q 1, q m },,q 1,δ,F) לכל i,j,k נסמן ב- את השפה הכוללת את המילים שמובילות את i j האוטומט מ- q i ל- q j בלי לעבור דרך מצב שמספרו גדול מ k ("לעבור דרך" אינו כולל את המצב ממנו יוצאים והמצב אליו מגיעים). L k i, j = { w δ ( q u, v δ ( q i i k L,, w) = w,, u) = q l q j uv, = w, l L פורמלית: k} 24
ביטוי רגולרי שקול לאוטומט 1) (המשך עפ"י ההגדרה הקודמת, כיוון שאין מצב גדול מ- m m הרי ש- L כוללת את כל המילים המובילות את i, j האוטומט ממצב q i למצב.q j m L( A) בפרט L נשים לב כי סימננו את המצב ההתחלתי ב.q 1 השפה L(A) הינה איחוד של מספר סופי של שפות. k L ביטוי רגולרי לפיכך אם נוכל למצוא לכלj i, למצוא ביטוי רגולרי עבור.L(A) = 1, j q F j נוכל 25
k השפה L ij q 1 q k+3 q k+1 q i q k q k-3 qj נשים לב כי יתכן ש- i,j>k (בדוגמא זו (.j>k,i k q k-1 q k+2 q k-2 q m q k+... 26
L k i, הגדרה רקורסיבית של j.q j ל- q i עבור = 0 k ייתכן רק מעבר ישיר מ- q i q j q i i j i=j 0 w L i, j מתקיים. w 1 קל לוודא לפיכך, לכל שלשפה כזו קיים ביטוי רגולרי המייצג אותה. ( +σ 1 + +σ n ),(σ 1 + +σ n ) לדוגמא:, 27
(1 עבור הגדרה רקורסיבית של ב- קיימים שני סוגי מילים: (המשך q k,k > 0 מילים שאינן גורמות ל A k 1 נמצאות גם ב-. מילים הגורמות ל A לעבור דרך לעבור דרך מילים אלה L k i, j.q k L i, j k L i, j q i q k q j q i q k q j w 1 L k i, j 28
הגדרה רקורסיבית של 2) L (המשך k i, j את המילים הגורמות ל- A q k חלקים :uvw לעבור דרך ניתן לפרק לשלושה רישא u המובילה את A מ- q i לביקור ראשון ב- q. k רישא זו נמצאת k 1 ב-. חלק אמצעי v הגורם ל- A k 1 * חלק זה נמצא ב- ). לבצע מספר סיבובים תוך חזרה ל- q. k סיפא w המובילה את A מביקורו האחרון ב- q k k 1 ב-. ל- q. j סיפא זו נמצאת q i q j L k, k ) L i, k L k, j u 1 L k i, k q k w 1 L k k, j v ( 1 * L k k, k ) 29
סיכום בניית הביטוי הרגולרי עבור האוטומט k = k 1 + k 1 ( k 1 ) * k 1 i j i j i k k k k j r r r r r q i k 1 r i k k 1 r i j q k q j k 1 r k j ( k 1 r ) * k k 30
b a b k r11 q 1 a q 2 דוגמא קצרה k = 0 k = 1 k = 2 b+ ( ) * r + r r r 0 0 0 0 1 1 1 1 1 1 1 1 ( ) * r + r r r 1 1 1 1 1 1 1 2 2 2 2 1 = (b+)+(b+)(b+) * (b+)=b * =b * +b * a(b++ab * a) * ab * k r12 k r21 k r22 a a b+ ( ) * r + r r r 0 0 0 0 1 2 1 1 1 1 1 2 = a+(b+)(b+) * a=b * a ( ) * r + r r r 0 0 0 0 2 1 2 1 1 1 1 1 = a+a(b+) * (b+)=ab * ( ) * r + r r r 0 0 0 0 2 2 2 1 1 1 1 2 = (b+)+a(b+) * a=b++ab * a 31
משפט קליני משפט (קליני) משפחת השפות הרגולריות היא הקבוצה הקטנה ביותר המכילה את כל השפות הסופיות והסגורה תחת הפעולות הרגולריות. הוכחה כיוון א' כל שפה סופית היא רגולרית הוכח ביחידה הקודמת. סגירות ביחס לפעולות רגולריות הוכחה ביחידה זו. כיוון ב' נובע מהמשפט האחרון, לפיו לכל שפה רגולרית קיים ביטוי רגולרי המציין אותה. כל קבוצה המכילה את השפות הסופיות והסגורה לפעולה רגולריות חייבת להכיל את כל השפות המצוינות ע"י ביטויים רגולריים, כלומר את השפות הרגולריות. 32
זהויות בין ביטויים רגולריים כיוון שלכל שפה קיימים אינסוף ביטויים רגולריים המציינים אותה, נתעניין בשאלת הזהות בין שני ביטויים רגולריים. בשלב ראשון, שיטת ההוכחה תסתמך על תכונות השפות ביחס לפעולות רגולריות, ועל הוכחת הכלה דו כיוונית: L[r 1 ] = L[r 2 ] L[r 1 ] L[r 2 ] L[r 2 ] L[r 1 ] 33
זהויות רגולריות דוגמא 1.r,r 1 = (0 * 1) * יהיו * 1 1) (0 + + = 2 מייצגים את אותה השפה. נוכיח כי ביטויים אלה w L[r 1 ] L[r 1 ] L[r 2 ] נניח כי מכאן w = או w 1,,w n L[0 * 1], w = w 1 w 2 w n אם w = אז בוודאי ] 2.w { } {0,1} * {1} =L[r אחרת, w מסתיימת ב- 1, ולכן ] 2.w {0, 1} * {1} L[r 34
זהויות רגולריות דוגמא 1 (המשך) w L[r 2 ] = { } {0,1} * {1} w ({0} * {1}) * = L[r 1 ] x L[(0 + 1) * ].w L[r 1 ] w = x1 :L[r 2 ] L[r 1 ] נניח כי אם w = אזי בבירור נוכל לכתוב כאשר k מופעים של 1. x אם w יש נניח כי ב במקרה זה נוכל לכתוב k+1 x = y 1 1y 2 1 y k 1y כאשר לכל k+1.y i {0} *, 1 i אולם אז 1) k+1 w = (y 1 1)(y 2 1) (y k 1)(y ולכן 35
זהויות רגולריות דוגמא 2 * 1) (0 + אינם שקולים., נראה שהביטויים * 1 + * 0 דוגמא נגדית: * (1 0) + מייצגת את שפת כל המילים 01 L[(0 + 1) * ] זה בוודאי נכון, שכן מעל {0,1}. לעומת זאת ] * L[0 01 וכן ] * L[1 01.01 L[0 * ] L[1 * ] = L[0 * + 1 * ] ומכאן דוגמאות נוספות בתרגול. 36